diff --git a/django/db/models/base.py b/django/db/models/base.py
index e3b14a41a0..cc32d95875 100644
--- a/django/db/models/base.py
+++ b/django/db/models/base.py
@@ -847,13 +847,8 @@ class Model(metaclass=ModelBase):
         if not pk_set and (force_update or update_fields):
             raise ValueError("Cannot force an update in save() with no primary key.")
         updated = False
-        # Skip an UPDATE when adding an instance and primary key has a default.
-        if (
-            not force_insert and
-            self._state.adding and
-            self._meta.pk.default and
-            self._meta.pk.default is not NOT_PROVIDED
-        ):
+        # Only force an insert if the primary key has a default and no explicit value is provided.
+        if not force_insert and self._state.adding and self._meta.pk.default and self._meta.pk.default is not NOT_PROVIDED and not pk_set:
             force_insert = True
         # If possible, try an UPDATE. If that doesn't update anything, do an INSERT.
         if pk_set and not force_insert:
